package bookstudytest.optionaldemo;

import java.util.Optional;

/**
 * @Author li.heng
 * @Date 2019/6/24 15
 * @Description:
 **/
public class OptionalTest {
    public static void main(String[] args) {
        User female = new User("1", "female");
//        User male = new User("2", "male");
//        Optional<User> s = getInstace(female);
//        System.out.println(s.isPresent());
//        User user = orElse(null);
        User user = orElseGet(null);
        System.out.println(user);
    }
    public static Optional<User> getInstace(User str){
        // 这种实例化方式参数可以为null
        Optional<User> strOption = Optional.ofNullable(str);
        // 这种实例化方式参数不能为null，否则会报空指针异常
        Optional<User> str1 = Optional.of(str);
        return strOption;
    }

    public static User orElse(User user){
        // 可以在获得元素的时候有一个默认
        Optional<User> user1 = Optional.ofNullable(user);
        User et = user1.orElse(new User("3", "ET"));
        return et;
    }
    public static User orElseGet(User user){
        // 在获取元素时如果为null，调用一个Supplier的实现构造一个新的元素
        Optional<User> user1 = Optional.ofNullable(user);
        return user1.orElseGet(() -> new User("3", "ET"));
    }

    public static Optional<User> filter(User user){
        // 过滤容器内元素，使用predicate接口，如果test方法为false则返回一个空的容器
        Optional<User> user1 = Optional.ofNullable(user);
        return user1.filter((o) -> o.getSex() == null);
    }
}
